热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

词语|更多_Electra:判别还是生成,这是一个选择

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Electra:判别还是生成,这是一个选择相关的知识,希望对你有一定的参考价值。最近要开始使用Transformer去

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Electra: 判别还是生成,这是一个选择相关的知识,希望对你有一定的参考价值。


最近要开始使用Transformer去做一些事情了,特地把与此相关的知识点记录下来,构建相关的、完整的知识结构体系。

以下是要写的文章,文章大部分都发布在公众号【雨石记】上,欢迎关注公众号获取最新文章。


  • Transformer:Attention集大成者
  • GPT-1 & 2: 预训练+微调带来的奇迹
  • Bert: 双向预训练+微调
  • Bert与模型压缩
    • Bert与模型蒸馏:PKD和DistillBert
    • ALBert: 轻量级Bert
    • TinyBert: 模型蒸馏的全方位应用
    • MobileBert: Pixel4上只需40ms
    • 更多待续
  • Transformer + AutoML: 进化的Transformer
  • Bert变种
    • Roberta: Bert调优
    • Electra: 判别还是生成,这是一个选择
    • Bart: Seq2Seq预训练模型
    • Transformer优化之自适应宽度注意力
    • Transformer优化之稀疏注意力
    • Reformer: 局部敏感哈希和可逆残差带来的高效
    • Longformer: 局部attentoin和全局attention的混搭
      -Linformer: 线性复杂度的Attention
    • XLM: 跨语言的Bert
    • T5 (待续)
    • 更多待续
  • GPT-3
  • 更多待续

动机

对于Bert的改进,大家可能注意到我的句式都是Bert很好很强大,但是……,今天这篇也不例外,只是改进的方向有点出乎我的意料。

Bert很好很强大,但是它的训练太低效,为什么呢?我们来回顾一下,在训练Bert的时候,在输入上,把15%的词语给替换成Mask,然后这其中有80%是Mask,有10%是替换成其他词语,最后剩下10%保持原来的词语。

可以看到,Bert的训练中,每次相当于只有15%的输入上是会有loss的,而其他位置是没有的,这就导致了每一步的训练并没有被完全利用上,导致了训练速度慢。

于是,就有了Electra,Electra是Efficiently Learning an Encoder that Classifies Token Replacement Accurately的缩写。从名字中可以看出,相对于Bert的去预测Mask的正确值,Electra则是去预测Token是不是被替换了。那么具体是如何做的呢?


判别器 & 生成器

如下图所示,首先会训练一个生成器来生成假样本,然后Electra去判断每个token是不是被替换了。

大家看到这张图,可能会想到,这不是对抗生成网络咩?其实不是的,不是的奥秘就在损失函数上。

对抗生成网络传送门在此处开启

再来仔细的看一下算法流程,首先,输入经过随机选择设置为[MASK],然后输入给Generator,Generator负责把[MASK]变成替换过的词。

但此时Generator并不像对抗神经网络那样需要等Discriminator中传回来的梯度,而是像Bert一样那样去尝试预测正确的词语,从而计算损失。这就是Electra不是GAN的根本原因。

因此,极端情况下如果Generator的预测准确率是100%,那么Discriminator就学习不到什么了,因为所有的token都是正确词语。但所幸,Generator一般是个小模型,所以效果达不到这么高,同时,Generator刚开始就要和Discriminator联合训练,所以刚开始也不会达到这么高。

Discriminator则是去预测每个位置上的词语是不是被替换过。Discriminator是训练完之后我们得到的预训练模型,Generator在训练完之后就没有用了。

Electra另外一点和对抗生成网络不同的是,如果Generator生成的是和原始输入一样的token,那么这个token会被当做是没有替换,而在对抗生成网络中所有来源于生成器的数据都是fake数据。

用公式来解释上述过程,如下:

损失函数如下:

所以,最后的损失函数如下:

注意到GAN的损失函数是minG maxDV(D, G),跟这个损失函数大有不同。


实验效果

终极目标就是能在计算量等同的情况下,超过同等体量的模型效果。


其他尝试的设置

当然,还有很多其他的设置:


  • Generator是多余的模型部分,在最后不会被用到,但在训练时是要占用计算量的,所以为了保证同等计算量,就需要让Discriminator比其他的Bert变种要小。为了节省这一开支:
    • Generator要尽可能的小
    • embedding层可以和Discriminator共享
  • 真正的像GAN一样去做训练
  • Two-stage训练方法: 先训练Generator,然后再去训练Discriminator。

实验结果如下,可以看到,Discriminator的宽度为768,Generator宽度为256时效果最好。同时,GAN和Two-stage训练都不如Electra。


不同模型尺寸的对比

实验还分别比较了小模型和大模型。可以看到,无论是大模型还是小模型,Electra都可以超过Bert。



消融实验

为了验证Electra的提升到底是哪里来的,做了一些Bert和Electra中间设置的一些模型的实验,包括:


  • Electra 15%: 跟Electra很像,不过loss只来源于15%的位置,这点是仿照Bert。
  • Replace MLM: 跟Bert很像,不过要替换的词语不再是[MASK],而是Generator生成的词语。
  • All-Tokens MLM: 和上面的Replace MLM很像,但更进一步,预测所有的位置而不是仅预测被Mask的位置。

结果如下,可以看到,All-tokens MLM提升最大,但还可以看到,Electra相对于Bert,不仅仅在训练速度上有提升,在最终的结果上也有提升。

如下图所示,Electra可以达到Bert打不到的高度。


思考

勤思考,多提问是Engineer的良好品德。



  • 对抗生成网络在图像上应用很广,在文本上却遇到了很多问题,都遇到了什么问题?为什么?

关注公众号【雨石记】,答案会在后续的文章中。



参考文献
  • [1]. Clark, Kevin, et al. “Electra: Pre-training text encoders as discriminators rather than generators.” arXiv preprint arXiv:2003.10555 (2020).

推荐阅读
author-avatar
阿芙2011
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有